#ifndef DRACO_PCL_CONVERTER_H
#define DRACO_PCL_CONVERTER_H

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <draco/compression/encode.h>
#include <draco/compression/decode.h>
#include <draco/mesh/mesh.h>
#include <draco/point_cloud/point_cloud.h>
#include <memory>

class DracoPCLConverter {
public:
    // 将 PCL PointCloud 转换为 Draco PointCloud
    static std::unique_ptr<draco::PointCloud> PCLToDraco(
        const pcl::PointCloud<pcl::PointXYZI>::Ptr& pcl_cloud);
    
    // 将 Draco PointCloud 转换为 PCL PointCloud
    static pcl::PointCloud<pcl::PointXYZI>::Ptr DracoToPCL(
        const draco::PointCloud& draco_cloud);
    
    // 压缩点云
    static std::vector<uint8_t> CompressPointCloud(
        const pcl::PointCloud<pcl::PointXYZI>::Ptr& pcl_cloud, 
        int compression_level = 7);
    
    // 解压点云
    static pcl::PointCloud<pcl::PointXYZI>::Ptr DecompressPointCloud(
        const std::vector<uint8_t>& compressed_data);
};

#endif